home *** CD-ROM | disk | FTP | other *** search
- {
- >Try converting it to use pointers instead of accessing the array with
- >indexes, and use a pointer to video memory for direct plots
- >instead of using the putPixel routine. Also it's quicker to
- >check against 0 for the background than to check against 255.
-
- I found a copy of "The Visible Computer: 8088" in my bookshelves and
- tried rewriting my assembly routines. Here's what I finally got:
- }
-
- procedure MaskPut(x,y: word; p: pointer); assembler;
- var
- XX,YY: byte;
- asm
- LES SI,p
- MOV [XX],0
- MOV [YY],0
- MOV CX,256
- XOR DX,DX
- CLD
- @Loopit:SEGES LODSB
- MOV DL,AL
- PUSH ES
- PUSH SI
- CMP DL,255
- JZ @Done
- MOV AX,0A000h
- MOV ES,AX
- MOV AX,320
- MOV BX,[Y]
- ADD BL,[YY]
- PUSH DX
- MUL BX
- POP DX
- MOV BX,[X]
- ADD BL,[XX]
- ADD AX,BX
- MOV SI,AX
- MOV ES:[SI],DL
- @Done: INC [XX]
- CMP [XX],16
- JNZ @Okay
- MOV [XX],0
- INC [YY]
- @Okay: POP SI
- POP ES
- LOOP @Loopit
- end;
-
- {
- It works fine. I didn't notice much of a difference in speed though. I
- tested it and I can plot about 1103 sprites/second in ASM and 828
- sprites/sec. with my original TP code. Please keep in mind I'm not much
- of an assembly programmer. Can anyone help me optimize this code (into
- 286 would be good too). Thanx for your help!
- }